<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Agp\CoreBundle\Entity\RelatorioPeriodico
 *
 * @ORM\Table(name="relatorio_periodico_instancia")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\RelatorioPeriodicoInstanciaRepository")
 */
class RelatorioPeriodicoInstancia
{
    /**
     * @var integer $codRelatorioPeriodicoInstancia
     *
     * @ORM\Column(name="cod_relatorio_periodico_instancia", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $codRelatorioPeriodicoInstancia;

    /**
     * @var \DateTime $dtInicio
     *
     * @ORM\Column(name="dt_inicio", type="datetime")
     * @Assert\NotBlank
     */
    protected $dtInicio;

    /**
     * @var \DateTime $dtTermino
     *
     * @ORM\Column(name="dt_termino", type="datetime")
     * @Assert\NotBlank
     */
    protected $dtTermino;
    
    /**
     * @var object $empresa
     *
     * @ORM\ManyToOne(targetEntity="Agp\CoreBundle\Entity\Empresa", fetch="EAGER")
     * @ORM\JoinColumn(name="cod_empresa", referencedColumnName="cod_empresa", onDelete="Cascade")
     */
    protected $empresa;

    /**
     * @ORM\ManyToMany(targetEntity="Agp\CoreBundle\Entity\Atendente")
     * @ORM\JoinTable(name="relatorio_periodico_instancia_atendente",
     *     joinColumns={@ORM\JoinColumn(name="cod_relatorio_periodico_instancia", referencedColumnName="cod_relatorio_periodico_instancia", onDelete="Cascade")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="cod_atendente", referencedColumnName="cod_atendente", onDelete="Cascade")}
     * )
     * @var ArrayCollection $atendentes
     */ 
    protected $atendentes;
    
    /**
     * @ORM\ManyToMany(targetEntity="Agp\CoreBundle\Entity\Evento")
     * @ORM\JoinTable(name="relatorio_periodico_instancia_evento",
     *     joinColumns={@ORM\JoinColumn(name="cod_relatorio_periodico_instancia", referencedColumnName="cod_relatorio_periodico_instancia", onDelete="Cascade")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="cod_evento", referencedColumnName="cod_evento", onDelete="Cascade")}
     * )
     * @var ArrayCollection $eventos
     */ 
    protected $eventos;
    
    /**
     * @ORM\ManyToMany(targetEntity="Agp\CoreBundle\Entity\TerminalEmpresa")
     * @ORM\JoinTable(name="relatorio_periodico_instancia_terminal_empresa",
     *     joinColumns={@ORM\JoinColumn(name="cod_relatorio_periodico_instancia", referencedColumnName="cod_relatorio_periodico_instancia", onDelete="Cascade")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="cod_terminal_empresa", referencedColumnName="cod_terminal_empresa", onDelete="Cascade")}
     * )
     * @var ArrayCollection $terminais
     */ 
    protected $terminais;
    
    const IN_DIARIO = 'Diário';
    const IN_SEMANAL = 'Semanal';
    const IN_MENSAL = 'Mensal';
    /**
     * @ORM\Column(name="intervalo", type="string", nullable=false)
     * @var string
     */
    protected $intervalo;

    /**
     * @ORM\Column(name="descricao", length=45, type="string", nullable=true)
     * @Assert\NotBlank()
     * @var string
     */
    protected $descricao;
    
    const TP_VENDAS = 'Vendas';
    const TP_VENDAS_TERMINAL = 'Vendas agrupado por terminal';
    const TP_VENDAS_TERMINAL_PRODUTO = 'Vendas agrupado por terminal e produto';
    const TP_PRODUTOS_VENDIDOS = 'Produtos vendidos';
    const TP_PRODUTOS_VENDIDOS_PRODUTO = 'Produtos vendidos agrupado por produto';
    const TP_MOVIMENTACAO = 'Movimentação';
    const TP_MOVIMENTACAO_TERMINAL = 'Movimentação agrupado por terminal';
    const TP_PDV = 'Pontos de venda';
    
    /**
     * @ORM\Column(name="tipo_relatorio", type="string", nullable=false)
     * @var string
     */
    protected $tipo;
    
    /**
     * @ORM\Column(name="notificacao",type="boolean", nullable=true)
     * @var string
     */
    protected $notificacao;
    
    public function __construct() {
        $this->atendentes = new ArrayCollection;
        $this->eventos = new ArrayCollection;
        $this->terminais = new ArrayCollection;
    }

    public function getCodRelatorioPeriodicoInstancia() {
        return $this->codRelatorioPeriodicoInstancia;
    }

    public function setCodRelatorioPeriodicoInstancia($codRelatorioPeriodicoInstancia) {
        $this->codRelatorioPeriodicoInstancia = $codRelatorioPeriodicoInstancia;
    }

    public function getDtInicio() {
        return $this->dtInicio;
    }

    public function setDtInicio($dtInicio) {
        $this->dtInicio = $dtInicio;
    }

    public function getDtTermino() {
        return $this->dtTermino;
    }

    public function setDtTermino($dtTermino) {
        $this->dtTermino = $dtTermino;
    }
 
    public function getEmpresa() {
        return $this->empresa;
    }

    public function setEmpresa($empresa) {
        $this->empresa = $empresa;
    }

    public function getTerminais() {
        return $this->terminais;
    }

    public function setTerminais($terminais) {
        foreach ($terminais as $terminal){
            $this->addTerminal($terminal);
        }
    }
    
    public function addTerminal($terminal) {
        $this->terminais[] = $terminal;
    }

    public function getIntervalo() {
        return $this->intervalo;
    }

    public function setIntervalo($intervalo) {
        $this->intervalo = $intervalo;
    }

    public function getDescricao() {
        return $this->descricao;
    }

    public function setDescricao($descricao) {
        $this->descricao = $descricao;
    }

    public function getTipo() {
        return $this->tipo;
    }

    public function setTipo($tipo) {
        $this->tipo = $tipo;
    }

    public function getNotificacao() {
        return $this->notificacao;
    }

    public function setNotificacao($notificacao) {
        $this->notificacao = $notificacao;
    }
    
    public function getAtendentes() {
        return $this->atendentes;
    }

    public function setAtendentes($atendentes) {
        $this->atendentes = $atendentes;
    }

    public function getEventos() {
        return $this->eventos;
    }

    public function setEventos($eventos) {
        $this->eventos = $eventos;
    }
    
    public function getDados(){

        $dados['terminais'] = $this->terminais;
        $dados['evento'] = $this->eventos;
        $dados['atendente'] = $this->atendentes;
        $dados['dtInicio'] = $this->dtInicio;
        $dados['dtTermino'] = $this->dtTermino;
        
        switch ($this->tipo)
        {
             case self::TP_VENDAS:
                  $dados['grupo'] = null;
                  break;
             
             case self::TP_VENDAS_TERMINAL;
                  $dados['grupo'] = 't';
                  break;
              
              case self::TP_VENDAS_TERMINAL_PRODUTO;
                  $dados['grupo'] = 'tp';
                  break;
              
             case self::TP_PRODUTOS_VENDIDOS;
                  $dados['grupo'] = null;
                  break;
              
             case self::TP_PRODUTOS_VENDIDOS_PRODUTO;
                  $dados['grupo'] = 'p';
                  break;
              
             case self::TP_MOVIMENTACAO;
                  $dados['grupo'] = null;
                  break;
              
             case self::TP_MOVIMENTACAO_TERMINAL;
                  $dados['grupo'] = 't';
                  break;
             
             case self::TP_PDV;
                  $dados['grupo'] = 'pt';
                  break;
             
  
        }
        
        return $dados;
        
    }

}
